home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 284_01 / bios20.asm < prev    next >
Encoding:
Assembly Source File  |  1989-03-11  |  3.1 KB  |  256 lines

  1. ;    Fake bios for Portable CP/M System
  2.  
  3. SYSSIZE equ    20            ; system size in KB
  4. NDISKS    equ    8            ; max. drive
  5.  
  6. ;   *** Definitions
  7.  
  8. ESC    equ    0EDEDH            ; special ESCAPE instruction
  9. Icboot    equ    0
  10. Iwboot    equ    1
  11. Iconst    equ    2
  12. Iconin    equ    3
  13. Iconot    equ    4
  14. Ilstot    equ    5
  15. Iauxot    equ    6
  16. Iauxin    equ    7
  17. Idsdma    equ    12
  18. Idread    equ    13
  19. Idwrit    equ    14
  20. Ilstst    equ    15
  21.  
  22. BIAS    equ    ( SYSSIZE - 20 ) * 1024
  23. BOOT    equ    00000H
  24. STACK    equ    00100H
  25. CCP    equ    03400H + BIAS
  26. BDOS    equ    03C06H + BIAS
  27. BIOS    equ    04A00H + BIAS
  28.  
  29. cdisk    equ    00004H            ; current disk and user
  30. iobyte    equ    00005H            ; Intel I/O byte
  31.  
  32. ;   *** Boot code
  33.  
  34.     org    BOOT
  35.     jmp    BIOS
  36.  
  37. ;   *** Bios body
  38.  
  39.     org    BIOS
  40.  
  41. JVECT:    jmp    CBOOT
  42.     jmp    WBOOT
  43.     jmp    CONST
  44.     jmp    CONIN
  45.     jmp    CONOT
  46.     jmp    LSTOT
  47.     jmp    AUXOT
  48.     jmp    AUXIN
  49.     jmp    DHOME
  50.     jmp    DSDSK
  51.     jmp    DSTRK
  52.     jmp    DSSEC
  53.     jmp    DSDMA
  54.     jmp    DREAD
  55.     jmp    DWRIT
  56.     jmp    LSTST
  57.     jmp    STRAN
  58.  
  59. CBOOT:    lxi    sp, STACK
  60.     dw    ESC
  61.     db    Icboot
  62.     ora    a
  63.     jnz    halt
  64.     mvi    a, 0
  65.     sta    cdisk
  66.     mvi    a, 0
  67.     sta    iobyte
  68.     jmp    gocpm
  69.  
  70. WBOOT:    lxi    sp, STACK
  71.     dw    ESC
  72.     db    Iwboot
  73.     ora    a
  74.     jz    gocpm
  75. halt:    hlt                ; stop machine and exit
  76.  
  77. gocpm:    mvi    a, 0C3H
  78.     sta    00000H
  79.     sta    00005H
  80.     lxi    h, JVECT + 3
  81.     shld    00001H
  82.     lxi    h, BDOS
  83.     shld    00006H
  84.     lxi    b, 00080H
  85.     call    DSDMA
  86.     lda    cdisk
  87.     mov    c, a
  88.     jmp    CCP
  89.  
  90. CONST:    dw    ESC
  91.     db    Iconst
  92.     ret
  93.  
  94. CONIN:    dw    ESC
  95.     db    Iconin
  96.     ret
  97.  
  98. CONOT:    dw    ESC
  99.     db    Iconot
  100.     ret
  101.  
  102. LSTOT:    dw    ESC
  103.     db    Ilstot
  104.     ret
  105.  
  106. AUXOT:    dw    ESC
  107.     db    Iauxot
  108.     ret
  109.  
  110. AUXIN:    dw    ESC
  111.     db    Iauxin
  112.     ret
  113.  
  114. DSDSK:    lxi    h, 0
  115.     mov    a, c
  116.     sta    dskno
  117.     cpi    NDISKS
  118.     rnc
  119.     mov    l, c
  120.     mvi    h, 0
  121.     dad    h
  122.     dad    h
  123.     dad    h
  124.     dad    h
  125.     lxi    d, DPH
  126.     dad    d
  127.     ret
  128.  
  129. DHOME:    mvi    c, 0
  130.  
  131. DSTRK:    mov    a, c
  132.     sta    trkno
  133.     ret
  134.  
  135. DSSEC:    mov    a, c
  136.     sta    secno
  137.     ret
  138.  
  139. DSDMA:    dw    ESC
  140.     db    Idsdma
  141.     ret
  142.  
  143. DREAD:    lxi    d, dparam
  144.     dw    ESC
  145.     db    Idread
  146.     ret
  147.  
  148. DWRIT:    lxi    d, dparam
  149.     dw    ESC
  150.     db    Idwrit
  151.     ret
  152.  
  153. LSTST:    dw    ESC
  154.     db    Ilstst
  155.     ret
  156.  
  157. STRAN:    mov    h, b
  158.     mov    l, c
  159.     ret
  160.  
  161. ;   *** Tables
  162.  
  163. DPH:
  164. DPH0:    dw    00000H
  165.     dw    0,0,0
  166.     dw    DIRBUF
  167.     dw    DPB
  168.     dw    CSV0
  169.     dw    ALV0
  170. DPH1:    dw    00000H
  171.     dw    0,0,0
  172.     dw    DIRBUF
  173.     dw    DPB
  174.     dw    CSV1
  175.     dw    ALV1
  176. DPH2:    dw    00000H
  177.     dw    0,0,0
  178.     dw    DIRBUF
  179.     dw    DPB
  180.     dw    CSV2
  181.     dw    ALV2
  182. DPH3:    dw    00000H
  183.     dw    0,0,0
  184.     dw    DIRBUF
  185.     dw    DPB
  186.     dw    CSV3
  187.     dw    ALV3
  188. DPH4:    dw    00000H
  189.     dw    0,0,0
  190.     dw    DIRBUF
  191.     dw    DPB
  192.     dw    CSV4
  193.     dw    ALV4
  194. DPH5:    dw    00000H
  195.     dw    0,0,0
  196.     dw    DIRBUF
  197.     dw    DPB
  198.     dw    CSV5
  199.     dw    ALV5
  200. DPH6:    dw    00000H
  201.     dw    0,0,0
  202.     dw    DIRBUF
  203.     dw    DPB
  204.     dw    CSV6
  205.     dw    ALV6
  206. DPH7:    dw    00000H
  207.     dw    0,0,0
  208.     dw    DIRBUF
  209.     dw    DPB
  210.     dw    CSV7
  211.     dw    ALV7
  212.  
  213. DPB:    ; Compatible with 8'1S standard format ( without skew )
  214.     dw    26            ; SPT
  215.     db    3            ; BSH
  216.     db    7            ; BLM
  217.     db    0            ; EXM
  218.     dw    242            ; DSM
  219.     dw    63            ; DRM
  220.     db    11000000B        ; AL0
  221.     db    00000000B        ; AL1
  222.     dw    16            ; CKS
  223.     dw    2            ; OFF
  224.  
  225. ;   *** Variables
  226.  
  227. dparam:
  228. dskno:    ds    1
  229. trkno:    ds    1
  230. secno:    ds    1
  231.  
  232. ;   *** BDOS work area
  233.  
  234.     org    ( $ + 1 ) and 0FFFEH    ; make it even
  235. DIRBUF: ds    128
  236. CSV0:    ds    16
  237. CSV1:    ds    16
  238. CSV2:    ds    16
  239. CSV3:    ds    16
  240. CSV4:    ds    16
  241. CSV5:    ds    16
  242. CSV6:    ds    16
  243. CSV7:    ds    16
  244. ALV0:    ds    31
  245. ALV1:    ds    31
  246. ALV2:    ds    31
  247. ALV3:    ds    31
  248. ALV4:    ds    31
  249. ALV5:    ds    31
  250. ALV6:    ds    31
  251. ALV7:    ds    31
  252.  
  253. ENDBIOS equ    $            ; last address
  254.  
  255.     end
  256.